package com.bwt.stack;

import java.util.Scanner;

public class ArrayStackDemo {
	public static void main(String[] args) {
		ArrayStack arrayStack = new ArrayStack(4);
		String key = "";
		boolean loop = true;

		Scanner scanner = new Scanner(System.in);
		//输出一个菜单
		while (loop) {
			System.out.println("s(show):显示队列");
			System.out.println("e(exit):退出程序");
			System.out.println("push: 表示添加数据到栈(入栈)");
			System.out.println("pop: 表示从栈取数据(出栈)");
			key = scanner.next();
			switch (key) {
				case "show":
					arrayStack.list();
					break;
				case "push":
					System.out.println("输出一个数");
					int value = scanner.nextInt();
					arrayStack.push(value);
					break;
				case "pop":    //查看队列头的数据
					try {
						int res = arrayStack.pop();
						System.out.printf("队列头的数据是%d\n", res);
					} catch (Exception e) {
						System.out.println(e.getMessage());
					}
					break;
				case "exit":
					scanner.close();
					loop = false;
					break;
				default:
					break;
			}
		}
		System.out.println("程序退出-------");

	}
}

//定义ArrayStack 表示栈
class ArrayStack {
	private int maxSize; // 栈的大小
	private int[] stack;
	private int top = -1; // 表示栈顶 ,初始为-1

	public ArrayStack(int maxSize) {
		this.maxSize = maxSize;
		stack = new int[maxSize];
	}

	public boolean isFull() {
		return top == maxSize - 1;
	}

	public boolean isEmpty() {
		return top == -1;
	}

	public void push(int value) {
		if (isFull()) {
			System.out.println("栈满");
			return;
		}
		top++;
		stack[top] = value;
	}

	// 将栈顶的数据返回
	public int pop() {
		if (isEmpty()) {
			throw new RuntimeException("栈空");
		}
		int i = stack[top];
		top--;
		return i;
	}

	public void list() {
		if (isEmpty()) {
			System.out.println("栈空, 没有数据");
		}
		for (int i = top; i >= 0; i--) {
			System.out.println("stack[" + i + "]" + "=" + stack[i]);
		}
	}
}
